home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Online / PGP_GED4 / PGP.ged < prev    next >
Text File  |  2002-10-27  |  15KB  |  486 lines

  1. /*********************************************************************/
  2. /*                                                                   */
  3. /*   PGP für GoldEd 4.x - Arexx Script                              */
  4. /*                                                                   */
  5. /*                                                                   */
  6. /*              ´GoldED4´ - © Ditmar Eilert                      */
  7. /*                                                                   */
  8. /*           ´rexxreqtools.library´ © Nico François                  */
  9. /*                                                                   */
  10. /*                                                                   */
  11. /*  Autor: Lunz O. Wolfgang (Luwo)                                   */
  12. /*         <W.LUNZ@link-ba.cl.sub.de>                                */
  13. /*                                                                   */
  14. /*  Adapted to GoldED4 by P!\K/Un0X                                  */
  15. /*         <bstegema@ix.urz.uni-heidelberg.de>                       */
  16. /*                                                                   */
  17. /*  Hinweis: ´MERGE´en des PGP.men an das für Textverarbeitung       */
  18. /*           verwendete GoldEd-Menü!                                 */
  19. /*           & diesen Script in das 'REXX:'-Verzeichnis kopieren     */
  20. /*                                                                   */
  21. /*                                                                   */
  22. /*   $VER: PGP-GoldEd-Script V0.91  ©Luwo (29.04.1994)               */
  23. /*                                                                   */
  24. /*********************************************************************/
  25.  
  26.  
  27.  
  28. ADDRESS COMMAND  'STACK 12000'        /* PGP ist ziemlich hungrig :) */
  29.  
  30. lib = 'rexxreqtools.library'
  31. if ~show('l',lib) then call addlib(lib,0,-30,0)
  32.  
  33.  
  34.  
  35. OPTIONS RESULTS                            /* enable return codes    */
  36.  
  37. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then   /* not started by GoldEd ?*/
  38.     ADDRESS 'GOLDED.1'
  39.  
  40. 'LOCK CURRENT RELEASE=4'                             /* lock GUI, gain access  */
  41.  OPTIONS FAILAT 6                          /* ignore warnings        */
  42. SIGNAL ON SYNTAX                           /* ensure clean exit      */
  43. SIGNAL ON ERROR                            /* trap errors            */
  44.  
  45.  
  46. USERFILE = 'T:PGP_userIDs.tmp'           /* einige Standard-Variablen*/
  47. UserPath = 'T:Users'
  48. IDstring = '0x'
  49. NL       = '0a'x
  50. CLRSCR   = '0c'x
  51. PGP      = SEARCHPATH()   /* den Pfad aus der PGPPATH-Variablen lesen*/
  52.  
  53.  
  54. 'QUERY DOC VAR DEFAULTFILENAME'         /* wurde die Blockmarkierung */
  55. 'QUERY MARKED VAR BLOCKMARKIERUNG'      /* aktiviert?                */
  56. ORGFILENAME=DEFAULTFILENAME
  57.  
  58. IF BLOCKMARKIERUNG="TRUE" then  ORGFILENAME=DEFAULTFILENAME'.block'
  59.  
  60.  
  61.  
  62. /* --------- Begin der Verzweigungsroutine ------------------------- */
  63.  
  64.  
  65.  
  66. IF ARG(1)="READ_PGP" then READ_PGP()   /* SubProg, je nach Parameter */
  67. IF ARG(1)="WRITE_PGP" then WRITE_PGP()
  68. IF ARG(1)="ENCODE_normal" then ENCODE_normal()
  69. IF ARG(1)="DECODE_normal" then DECODE_normal()
  70. IF ARG(1)="UNTERSCHREIBEN" then UNTERSCHREIBEN()
  71. IF ARG(1)="KEY_aufnehmen" then KEY_aufnehmen()
  72. IF ARG(1)="KEY_ansehen" then KEY_ansehen()
  73. IF ARG(1)="KEY_editieren" then KEY_editieren()
  74. IF ARG(1)="KEY_entfernen" then KEY_entfernen()
  75. IF ARG(1)="KEY_beglaubigen" then KEY_beglaubigen()
  76. IF ARG(1)="KEY_anhaengen" then KEY_anhaengen()
  77. IF ARG(1)="KEY_generieren" then KEY_generieren()
  78.  
  79.  
  80. /* Kein verfügbarer Parameter ! */
  81.  
  82.  
  83. ADDRESS "GOLDED.1" 
  84. 'REQUEST BODY "PGP-Script-Fehler!" BUTTON "Mist!"'
  85.  REALLYQUIT()
  86.  
  87. /*----------- Ende der Verzweigungsroutine --------------------------*/
  88.  
  89. /*-------------------------------------------------------------------*/
  90. READ_PGP:                     /* PGP analysiert den Text selbständig */
  91.  
  92.      CALL SAVER()
  93.      ADDRESS COMMAND  PGP '+FORCE 'ORGFILENAME' -o'ORGFILENAME
  94.      CALL LOADER()
  95. REALLYQUIT('k')
  96. end
  97. /*-------------------------------------------------------------------*/
  98.  
  99.  
  100.  
  101. /*-------------------------------------------------------------------*/
  102. WRITE_PGP:                   /* Der Text wird für die entsprechenden */
  103.                              /* Empfänger codiert...                 */
  104.       CALL SAVER()
  105.       REQTITEL="Wählen sie die Empfänger.."
  106.       empfaengerliste = GETEMPFAENGER()
  107.         if empfaengerliste ~= '' then
  108.             do
  109.              ADDRESS COMMAND
  110.              PGP '-esta +FORCE 'ORGFILENAME EMPFAENGERLISTE
  111.              'c:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  112.              'c:delete >nil: 'ORGFILENAME'.asc'
  113.             end
  114.       CALL LOADER()
  115. REALLYQUIT()
  116. end
  117. /*-------------------------------------------------------------------*/
  118.  
  119.  
  120. /*-------------------------------------------------------------------*/
  121. ENCODE_normal:       /* Der Text wird mit einem Mantra verschlüsselt */
  122.  
  123.        CALL SAVER()
  124.         ADDRESS COMMAND
  125.         PGP '-cta ' ORGFILENAME
  126.        'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  127.        'c:delete >nil: 'ORGFILENAME'.asc'
  128.        CALL LOADER()   /* 'OPEN AGAIN' */
  129. REALLYQUIT()
  130. end
  131. /*-------------------------------------------------------------------*/
  132.  
  133.  
  134. /*-------------------------------------------------------------------*/
  135. DECODE_normal:       /* Der Text wird mit einem Mantra entschlüsselt */
  136.  
  137.        CALL SAVER()
  138.         ADDRESS COMMAND
  139.        PGP '-d +FORCE 'ORGFILENAME' -o'ORGFILENAME
  140.        CALL LOADER()
  141. REALLYQUIT()
  142. end
  143. /*-------------------------------------------------------------------*/
  144.  
  145. /*-------------------------------------------------------------------*/
  146. UNTERSCHREIBEN:       /* Der Text wird mit der persönlichen Signatur */
  147.                       /* unterschrieben, und ggfs. komprimiert       */
  148.  
  149.           TITXT = 'Text unterschreiben...'
  150.           BTTXT = '_Ja|_Nein'
  151.           BDTXT = 'Wollen sie den Text\nauch komprimieren?'
  152.           call ABFRAGE()
  153.           if ergebnis =0 then
  154.                signcmd=' -sat +clearsig=on '
  155.             else
  156.                signcmd=' -sat +clearsig=off '
  157.  
  158.        CALL SAVER()
  159.            ADDRESS COMMAND
  160.            PGP SIGNCMD ORGFILENAME
  161.           'C:copy >nil: 'ORGFILENAME'.asc 'ORGFILENAME
  162.           'c:delete >nil: 'ORGFILENAME'.asc'
  163.        CALL LOADER()
  164. REALLYQUIT()
  165. end
  166. /*--------------------------------------------------------------------*/
  167.  
  168. /*--------------------------------------------------------------------*/
  169. KEY_aufnehmen:
  170.      CALL SAVER()
  171.      ADDRESS COMMAND
  172.      PGP '-ka '|| ORGFILENAME
  173.      'c:delete >nil: 'USERFILE
  174.      CALL LOADER()
  175. REALLYQUIT('key')
  176. end
  177. /*--------------------------------------------------------------------*/
  178.  
  179. /*--------------------------------------------------------------------*/
  180. KEY_ansehen:
  181.      REQTITEL="Welchen Key ansehen?..."
  182.      empfaengerliste = GETEMPFAENGER()
  183.      if empfaengerliste ~= '' then
  184.         do
  185.           ADDRESS COMMAND
  186.           PGP '-kvvc '|| empfaengerliste
  187.           REALLYQUIT('key')
  188.         end
  189. REALLYQUIT()
  190. end
  191. /*--------------------------------------------------------------------*/
  192.  
  193.  
  194. /*--------------------------------------------------------------------*/
  195. KEY_editieren:
  196.      REQTITEL="Welchen Key editieren?..."
  197.      empfaengerliste = GETEMPFAENGER()
  198.      if empfaengerliste ~= '' then
  199.         do
  200.           ADDRESS COMMAND
  201.           PGP '-ke '|| empfaengerliste
  202.           REALLYQUIT('key')
  203.         end
  204. REALLYQUIT()
  205. end
  206. /*--------------------------------------------------------------------*/
  207.  
  208.  
  209. /*--------------------------------------------------------------------*/
  210. KEY_entfernen:
  211.      REQTITEL="Welchen Key entfernen?..."
  212.      empfaengerliste = GETEMPFAENGER()
  213.      if empfaengerliste ~= '' then
  214.         do
  215.           ADDRESS 'GOLDED.1'
  216.           TITXT = 'Public-keys entfernen?'
  217.           BTTXT = '_Nein|_Ja'
  218.           BDTXT = namensliste
  219.           call ABFRAGE()
  220.           if ergebnis =0 then
  221.             do
  222.                ADDRESS COMMAND
  223.                PGP '-kr ' empfaengerliste
  224.                'c:delete >nil: 'USERFILE' T:users ALL'
  225.                REALLYQUIT('key')
  226.             end
  227.         end
  228. REALLYQUIT()
  229. end
  230. /*--------------------------------------------------------------------*/
  231.  
  232.  
  233. /*--------------------------------------------------------------------*/
  234. KEY_beglaubigen:
  235.    REQTITEL="Welchen Key beglaubigen?..."
  236.    empfaengerliste = GETEMPFAENGER()
  237.      if empfaengerliste ~= '' then
  238.         do
  239.           ADDRESS COMMAND
  240.           PGP '-ks '|| empfaengerliste
  241.           REALLYQUIT('key')
  242.         end
  243. REALLYQUIT()
  244. end
  245. /*--------------------------------------------------------------------*/
  246.  
  247.  
  248. /*--------------------------------------------------------------------*/
  249. KEY_anhaengen:
  250.  
  251.    RADIXcmd='INSERT'
  252.    REQTITEL="RADIX-64-Key einfügen..."
  253.  
  254.      empfaengerliste = GETEMPFAENGER()
  255.      if empfaengerliste ~= '' then
  256.        do
  257.             do i = 1 to words(empfaengerliste)
  258.              ADDRESS COMMAND
  259.              PGP '-fkxa 'word(empfaengerliste,i) ' >t:PGPextract.tmp'i
  260.             end
  261.  
  262.              ADDRESS 'GOLDED.1'
  263.             'QUERY ABSLINE VAR LIN'
  264.             'QUERY COLUMN VAR COL'
  265.             'REQUEST BODY="Wo wollen Sie den(die)|   RADIX-64 (ASCII)  |PublicKey(s) einfügen?"
  266.              TITLE="   Radix-64 Public-Key insert:"
  267.              BUTTON="_Cursor|Text_ende|_Vergiß es!" VAR ERGEBNIS'
  268.  
  269.             if ERGEBNIS = 2 then RADIXcmd='APPEND'
  270.  
  271.             if ERGEBNIS ~= 0 then
  272.                do i = 1 to words(empfaengerliste)
  273.                   'OPEN 'RADIXcmd' T:PGPextract.tmp'i
  274.                   'SAVE ALL'
  275.                end
  276.  
  277.             GOTO LINE LIN COLUMN COL
  278.             address command 'c:delete >nil: t:PGPextract.tmp#?'
  279.  
  280.        end
  281.  
  282. REALLYQUIT()
  283. end
  284. /*--------------------------------------------------------------------*/
  285.  
  286.  
  287. /*--------------------------------------------------------------------*/
  288. KEY_generieren:
  289.           TITXT = 'Secret-key generieren?'
  290.           BTTXT = '_Nein|_Ja'
  291.           BDTXT = ' Wollen Sie tatsächlich | einen geheimen Schlüssel | generieren?'
  292.           call ABFRAGE()
  293.           if ergebnis =0 then
  294.            do
  295.              ADDRESS COMMAND
  296.               PGP '-kg '
  297.               'c:delete >nil: 'USERFILE
  298.              REALLYQUIT('key')
  299.            end
  300. REALLYQUIT()
  301. end
  302. /*--------------------------------------------------------------------*/
  303.  
  304.  
  305.  
  306. /* ---------------- Auswahl der Empfaenger--------------------------- */
  307. GETEMPFAENGER:
  308.  
  309. ADDRESS COMMAND
  310. drop empfaengerliste
  311. PGPcmd   = ''
  312. namensliste= ''
  313.  
  314. /* ist der T:user-Path schon da? */
  315.  if ~EXISTS(UserPath) then 'C:makedir ' USERPATH
  316.  
  317. /* sind die UserIds schon extrahiert? */
  318.  if ~EXISTS(USERFILE) then  call MAKEUSERLISTE()
  319.  
  320. call rtfilerequest("T:Users/", , REQTITEL, ,"rtfi_flags=freqf_multiselect rt_pubscrname=GOLDED.1",empfaenger)
  321.  
  322. if empfaenger == 1 then
  323.   do
  324.     do i=1 to empfaenger.count
  325.       call Open('USID',empfaenger.i,"R")
  326.       dummy = readch('USID',8)
  327.       call Close('USID')
  328.  
  329.       if left(dummy,2)="0x" then
  330.         do
  331.           PGPcmd=PGPcmd dummy
  332.       namensliste =namensliste right(empfaenger.i,length(empfaenger.i)-8) '|'
  333.         end
  334.     end
  335.   end
  336.  
  337.   call rtfreefilebuffer()
  338. return PGPcmd
  339. /*--------------------------------------------------------------------*/
  340.  
  341.  
  342. /* Erstellen der aus der pubring.key-datei extrahierten User Ids */
  343. MAKEUSERLISTE:
  344.     ADDRESS COMMAND PGP ' -kv >'USERFILE
  345.        call Open('UFID',USERFILE,'R')
  346.            do until EOF('UFID')=1
  347.               dummy = READLN('UFID')
  348.  
  349.                 if (UPPER(LEFT(dummy,3))="PUB")&(word(dummy,4)~='***') then
  350.  
  351.                   do
  352.                     keyid = right(word(dummy,2),6)
  353.                     namestart= wordindex(dummy,4)
  354.                     nameend= pos('<',dummy)
  355.                      if nameend=0 then nameend=LENGTH(dummy)+2
  356.                     namelength=nameend-namestart-1
  357.                     name=substr(dummy,namestart,namelength)
  358.                     name=compress(name,':;/><')
  359.  
  360.                     call Open('currentUser',UserPath'/'name,'W')
  361.                     call Writech('currentUser',IDSTRING||KEYID)
  362.                     call Close('currentUser')
  363.  
  364.                   end
  365.  
  366.            end
  367.        call Close('UFID')
  368. say Clrscr
  369. return
  370. /*--------------------------------------------------------------------*/
  371.  
  372.  
  373. /* ------------------- diverse Unterprogramme ----------------------- */
  374.  
  375. SAVER:               /* Speichert, je nachdem, ob die Blockmarkierung */
  376.                      /* aktiviert wurde oder nicht, den ganzen Text,  */
  377.                      /* oder nur einen Ausschnitt daraus ab...        */
  378. ADDRESS "GOLDED.1"
  379. if BLOCKMARKIERUNG="FALSE" then
  380.     do
  381.       'SAVE ALL'
  382.     return 0
  383.     end
  384.  
  385. if BLOCKMARKIERUNG="TRUE" then
  386.     do
  387.       SAVE BLOCK NAME ORGFILENAME
  388.     return 0
  389.     end
  390. end
  391.  
  392. /*--------------------------------------------------------------------*/
  393. LOADER:         /* Lädt, je nachdem, ob die Blockmarkierung aktiviert */
  394.                 /* wurde oder nicht, den ganzen Text, oder auch nur   */
  395.                 /* einen Block wieder ein...                          */
  396.  
  397. ADDRESS "GOLDED.1"
  398. if BLOCKMARKIERUNG="FALSE" then
  399.     do
  400.       'OPEN AGAIN'
  401.     return 0
  402.     end
  403.  
  404. if BLOCKMARKIERUNG="TRUE" then
  405.     do
  406.       DELETE BLOCK
  407.       OPEN INSERT NAME ORGFILENAME
  408.       ADDRESS COMMAND 'c:delete >nil: 'ORGFILENAME
  409.     return 0
  410.     end
  411. end
  412.  
  413.  
  414. /*--------------------------------------------------------------------*/
  415. SEARCHPATH:
  416.  
  417. ADDRESS COMMAND
  418. if exists('env:PGPPATH') then
  419.     do
  420.      call Open('binpath','ENV:PGPPATH','R')
  421.      dummy=readln('binpath')
  422.      call Close('binpath')
  423.      if (right(dummy, 1) ~= "/") & (right(dummy, 1) ~= ":") then
  424.         dummy = dummy||'/'
  425.      dummy='PGP="'dummy||'bin/pgp"'
  426.      interpret  dummy
  427.     end
  428.  
  429. else
  430.     do
  431.      ADDRESS "GOLDED.1"
  432.      TITXT = 'PGP-AREXX-INTERNAL-ERROR'
  433.      BTTXT = '_OKIDOKI'
  434.      BDTXT = "Die PGPPATH-Variable ist nicht gesetzt!|      Bitte deklarieren sie diese !    |    Vorläufig wird 'C:PGP' verwendet   "
  435.      call ABFRAGE()
  436.      return 'c:pgp'
  437.     end
  438.  
  439. ADDRESS COMMAND
  440. return PGP
  441. end
  442.  
  443.  
  444. /*--------------------------------------------------------------------*/
  445. ABFRAGE:                              /* Erstellt einen Requester...  */
  446.  
  447. ADDRESS "GOLDED.1"
  448. 'REQUEST TITLE="'TITXT'" BODY="'BDTXT'" BUTTON="'BTTXT'" VAR ERGEBNIS'
  449. return 0
  450. end
  451.  
  452.  
  453. /*--------------------------------------------------------------------*/
  454. REALLYQUIT:
  455. ADDRESS "GOLDED.1"
  456. arg QUITTER
  457.  
  458. if QUITTER~=''then
  459.     do
  460.       say NL 'Bitte "Return" um weiterzumachen'
  461.       pull QUITTER
  462.     end
  463. 'NAME 'DEFAULTFILENAME
  464. 'UNLOCK'                                  /* Sehr wichtig: unlock GUI */
  465. EXIT
  466.  
  467. /*--------------------------------------------------------------------*/
  468. ERROR:
  469.       say NL 'Ein Fehler ('RC') ist in Zeile:'SIGL' aufgetreten :~('
  470.       say    '-=> [Press return]'
  471.       pull QUITTER
  472.  
  473. ADDRESS "GOLDED.1"
  474. 'NAME 'DEFAULTFILENAME
  475. 'UNLOCK'
  476. EXIT
  477.  
  478.  
  479. /*--------------------------------------------------------------------*/
  480. SYNTAX:
  481.  ADDRESS "GOLDED.1"
  482. SAY "Sorry, Syntax-error line" SIGL ":" ERRORTEXT(RC) ":-("
  483. 'UNLOCK'
  484. /*--------------------------------------------------------------------*/
  485.  
  486.